package com.apexedu.eas.util;

import java.util.Collections;
import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.hql.FilterTranslator;
import org.hibernate.hql.QueryTranslatorFactory;
import org.hibernate.hql.ast.QueryTranslatorImpl;
import org.hibernate.impl.SessionFactoryImpl;

public class HibernateUtil {  

  
    /** 
     * 将hql语句转换为sql语句,无参数 
     * 
     * @param hql 要转换的hql语句 
     * @return 可执行的sql语句, 当返回null, 可以通过getResultMsg()方法查看处理结果信息 
     */  
    public static String transHqlToSql(SessionFactory sessionFactory,String hql) {  
    	hql="update TAopLog set id = '0' where id = '0'";
        // 当hql为null或空时,直接返回null  
        if (hql == null || hql.equals("")) {  
            return "";  
        }  
        // 获取当前session  
        org.hibernate.hql.ast.QueryTranslatorImpl queryTranslator = new org.hibernate.hql.ast.QueryTranslatorImpl(  
                hql, hql, java.util.Collections.EMPTY_MAP,  
                (org.hibernate.engine.SessionFactoryImplementor) sessionFactory);  
      
        queryTranslator.compile(java.util.Collections.EMPTY_MAP, false);  
      
        return queryTranslator.getSQLString();  
    }  
  
    /** 
     * 将hql语句转换为sql语句,不需要格式化参数的情况 
     * 
     * @param hql         要转换的hql语句 
     * @param paramValues hql参数值列表,注意与参数的顺序一致 
     * @return 可执行的sql语句, 当返回null, 可以通过getResultMsg()方法查看处理结果信息 
     */  
    public  static String transHqlToSql(SessionFactory sessionFactory, String hql, List paramValues) {  
        // 要返回的sql语句  
        String sql = transHqlToSql(sessionFactory,hql);  
        // 当为null或空时,返回null  
        if (sql == null || sql.equals("")) {  
            return null;  
        }  
        // 赋参数值  
        if (paramValues != null && paramValues.size() > 0) {  
            for (int i = 0; i < paramValues.size(); i++) {  
                sql = sql.replaceFirst("\\?", "\\'" + paramValues.get(i).toString() + "\\'");  
            }  
        }  
        return sql;  
    }  
}  
